from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.middleware.cors import CORSMiddleware

from app.web import web
from app.api import api
from app.config import logger
from contextlib import asynccontextmanager


@asynccontextmanager
async def lifespan(app: FastAPI):
    """
    定义一个上下文管理器lifespan，用于在服务启动和关闭时执行一些操作。
    """
    logger.info("*******************启动服务******************")
    yield
    logger.info("*******************关闭服务******************")


# 实例化一个FastAPI对象
app = FastAPI(
    title="翻译API接口文档",
    description="集合主流的翻译功能，支持多种语言的翻译",
    version="0.1.0",
    docs_url="/docs",
    redoc_url="/redoc",
    lifespan=lifespan,
)

# 添加跨域中间件
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# 挂载静态资源目录
app.mount("/static", StaticFiles(directory="app/web/static"), name="static")

# 挂载路由
app.include_router(web, prefix="", tags=["web站点,网页资源"], include_in_schema=False)
app.include_router(api, prefix="/api")  # 不要写tags参数，否则会导致文档中的接口重复显示
